import http from 'wechat-http'

http.baseURL = 'https://live-api.itheima.net'


// 请求拦截器
http.intercept.request = function (options) {
  // 需要在请求头中携带token
  // 而微信的wechathttp不同于axios 它并不会自动的携带请求头
  // 所有这里需要拓展一下请求头信息
  const defaultHeader = {}
  defaultHeader.Authorization = `Bearer ${getApp().token}`
  // 当然也要考虑它 可能会有请求头的情况
  options.header = Object.assign({}, defaultHeader, options.header)
  return options
}
// 响应拦截器
http.intercept.response = async function  ({ data,config }) {
  // 处理token过期
    const app = getApp()
  if (data.code === 401) {
    // refreshToken 过期处理 如果状态码为 401 且接口url为/refreshToken 就意味着refreshToken过期了
    if (config.url.includes('/refreshToken')) {
      // wx.clearStorageSync()
      // app.setToken('token', '')
      // app.setToken('refreshToken','')
      //  // 获取应用栈
      const pages = getCurrentPages()
      // 拿到页面栈数组中 最后一个页面页面实例的页面路径
      const { route } = pages.pop()
      // 跳转到登录页 并携带页面栈中最后一位的页面路径
      return wx.redirectTo({
        url:'/pages/login/index?redirectURL=/' + route
      })
    }


    // 获取应用实例 取出refreshToken去调刷新token的接口
  
    // 调接口 拿到最新的token 去请求头中更新错误的token
    // http.post请求只支持两个参数
    const { code , data:{ token,refreshToken } } = await http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization:'Bearer ' + app.refreshToken
      }
    })
 
    // config 中就包含了上一次的请求信息 
    // 如果状态码不是10000 就意味着refreshToken也过期了
    if (code !== 10000) return wx.redirectTo({ url: '/pages/login/index' })
       // 拿到token 替换本地存储中的token
    app.setToken('token', token)
    app.setToken('refreshToken',refreshToken)
    // 拿到token过期时发出的请求 请其中的token做修改
    config = Object.assign(config, {
      header: {
        Authorization:'Bearer ' + token
      }
    }
    )

    // 返回正确token发出的请求
    return http(config)
  }
  return data
}
wx.http = http
export default http